package ar.edu.utn.frba.disenio.aterrizar.filtros;

import java.util.ArrayList;
import java.util.Collection;

import ar.edu.utn.frba.disenio.aterrizar.aerolineas.Vuelo;
import ar.edu.utn.frba.disenio.aterrizar.busquedas.BusquedaFiltrada;
import ar.edu.utn.frba.disenio.aterrizar.busquedas.DecoratorFiltroOpcional;

public class Clase extends DecoratorFiltroOpcional{
	
	Collection<String> clases;
	private boolean centinel = false;
	
	public Clase(Collection<String> colecClases, BusquedaFiltrada busquedaaFiltrar) {
		super(busquedaaFiltrar);
		if (colecClases != null) this.clases = colecClases;
	}

	@Override
	public ArrayList<Vuelo> buscarVuelos(){
		ArrayList<Vuelo> busquedaaFiltrar = busqueda.buscarVuelos();
		
		if(this.clases != null){
			ArrayList<Vuelo> retVal = new ArrayList<Vuelo>();
			
			for(Vuelo unVuelo : busquedaaFiltrar){
				this.centinel = false;
				for (Vuelo unVueloCandidato : unVuelo.getVuelos()){
					if(!this.isClase(clases, unVueloCandidato.clase)){
						this.centinel = true;
				}
					if(!this.centinel)retVal.add(unVuelo);
				}			
	        }		
			return retVal;	
		}		
		
		return busquedaaFiltrar;
	}
	
	public enum ClaseAsiento {
		PRIMERA,EJECUTIVO,TURISTA
	}
	
	public String getClaseAsiento(String claseAsiento) {
		String clase = "";
		switch (ClaseAsiento.valueOf(claseAsiento.toUpperCase())){
		case PRIMERA:
			clase = "P";
			break;
		case EJECUTIVO:
			clase = "E";
			break;
		case TURISTA:
			clase = "T";	
			break;
		}
		return clase;
	}
	
	public boolean isClase(Collection<String> clases, String unaClaseEspecifica){
		for(String unaClase : clases){
			if(this.getClaseAsiento(unaClase).equals(unaClaseEspecifica)){
				return true;
			}
		}
		return false;
	}
}